//package com.runa.monitor.platinterface.service;
//
//import com.runa.monitor.comm.entity.CommMeter;
//import com.runa.monitor.comm.entity.CommNetEquipment;
//import com.runa.monitor.comm.entity.EntityErrorLog;
//import com.runa.monitor.platinterface.netservice.equipment.NetEqu;
//import com.runa.monitor.platinterface.platService.NetEquService;
//import com.runa.persistence.repository.CommMeterRepository;
//import com.runa.persistence.repository.CommNetEquipmentRepository;
//import com.runa.persistence.repository.ErrorLogRepository;
//import com.runa.protocol.util.ByteUtil;
//import com.runa.rccprotocol.dto.guangda.GdRequestData;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.concurrent.atomic.AtomicInteger;
//import java.util.stream.Collectors;
//
///**
// * 2024/7/16 9:22
// * zhangYB
// */
//@Slf4j
//@Service
//public class GdService {
//
//
//    @Resource
//    private NetEquService netEquService;
//    @Resource
//    private ErrorLogRepository errorLogRepository;
//    @Resource
//    private CommMeterRepository commMeterRepository;
//    @Resource
//    private CommNetEquipmentRepository commNetEquipmentRepository;
//
//    private Map<String, Boolean> runningMap = new HashMap<>();
//
//
//    private static AtomicInteger clientId = new AtomicInteger(0);
//
//    public void gdReadCompleted() {
////        String netSerial = GdConstant.pollNetSerial();
////        while (netSerial != null) {
////            gdReadCompleted(netSerial);
////            netSerial = GdConstant.pollNetSerial();
////        }
//        gdReadCompleted("000117090069");
//    }
//
//    public void gdReadCompleted(String netSerial) {
//        NetEqu<String> netEqu = netEquService.getInstance(netSerial);
//        if (null == netEqu) {
//            log.error("{} 不存在", netSerial);
//            return;
//        }
//        if (!netEqu.online()) {
//            log.error("{} 不在线", netSerial);
//            return;
//        }
//
//        Boolean running = runningMap.computeIfAbsent(netSerial, k -> false);
//
//        if (running) {
//            log.error("{} 已存在光大读取...", netSerial);
//            return;
//        }
//
//        readByNo(netEqu, netSerial);
//    }
//
//
//    private void readByNo(NetEqu netEqu, String netSerial) {
//        runningMap.put(netSerial, true);
//        new Thread(() -> {
//            try {
//                log.info("开始光大读取...");
//                CommNetEquipment netEquipment = commNetEquipmentRepository.findBySerial(netSerial);
//                if (null == netEquipment) {
//                    return;
//                }
//                List<CommMeter> commMeters = commMeterRepository.findByNetEquipmentId(netEquipment.getId());
//                for (CommMeter commMeter : commMeters) {
//                    GdTaskFunction gdTaskFunction = new GdTaskFunction(netSerial);
//                    int i = clientId.incrementAndGet();
//                    GdRequestData gdRequestData = new GdRequestData(netSerial, commMeter.getSerial(), i);
//                    gdTaskFunction.setRequestData(gdRequestData);
//                    log.debug("光大 {} 读取 {} {} {}", netSerial, commMeter.getSerial(), i, gdRequestData.getMessage());
//                    netEqu.sendRequest(gdRequestData, gdTaskFunction);
//                }
//
//            } catch (Exception e) {
//                log.error("", e);
//            }
//            log.info("开始光大读取结束...");
//            runningMap.put(netSerial, false);
//        }, "GD-executor-"+netSerial).start();
//
//    }
//
//    private void readByIndex(NetEqu netEqu, String netSerial) {
//        runningMap.put(netSerial, true);
//        new Thread(() -> {
//            try {
//                log.info("开始光大读取...");
//                String node = "COMMNode:GD:Read:Response:List:"+netSerial;
//                Map<String, List<EntityErrorLog>> errorLogEventMap = errorLogRepository.findByNode(node).stream().collect(Collectors.groupingBy(EntityErrorLog::getEvent));
//
//
//                int l = 1;
//                for (int i = 0; i < 255; i = i + l) {
//                    if (errorLogEventMap.containsKey(String.valueOf(i))) {
//                        List<EntityErrorLog> entityErrorLogs = errorLogEventMap.get(String.valueOf(i));
//                        if (null != entityErrorLogs && entityErrorLogs.size() == l) {
//                            continue;
//                        }
//                    }
//                    GdTaskFunction gdTaskFunction = new GdTaskFunction(netSerial);
//                    GdRequestData gdRequestData = new GdRequestData(netSerial, i, l, i);
////                    GdRequestData gdRequestData = new GdRequestData(netSerial, i, l, i);
//                    gdTaskFunction.setRequestData(gdRequestData);
//                    log.debug("光大 {} 读取 {} {}", netSerial, i, ByteUtil.byteToHexString(gdRequestData.getData()));
//                    netEqu.sendRequest(gdRequestData, gdTaskFunction);
//                }
//
//            } catch (Exception e) {
//                log.error("", e);
//            }
//            log.info("开始光大读取结束...");
//            runningMap.put(netSerial, false);
//        }, "GD-executor-"+netSerial).start();
//    }
//
//
//
//
//
//
//
//
//
//
//}
